/**
 * @description 比较时间大小,时间格式为 yyyy-MM-dd HH:mm:ss
 * @param startTime 开始时间
 * @param endTime
 * @returns
 */
export default function compareTime(startTime: string, endTime: string) {
  const start = new Date(startTime).getTime();
  const end = new Date(endTime).getTime();
  return start >= end;
}

/**
 * 将文件大小从一个单位转换为另一个单位。
 *
 * @param {number} size 文件大小。
 * @param {string} fromUnit 初始单位（'B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'）。
 * @param {string} toUnit 目标单位（'B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'）。
 * @param {number} [decimalPoint=2] 结果保留的小数位数，默认为2。
 * @return {string} 转换后的文件大小，带单位。
 */
export function convertFileSize(
  size: number,
  fromUnit: string,
  toUnit: string,
  decimalPoint: number = 2,
): string {
  // 定义单位与字节之间的转换关系
  const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];

  // 获取初始单位和目标单位的索引;
  const fromIndex = units.indexOf(fromUnit);
  const toIndex = units.indexOf(toUnit);

  // 如果单位不在列表中，抛出错误
  if (fromIndex === -1 || toIndex === -1) {
    throw new Error('Invalid units');
  }

  // 计算转换后的文件大小
  const convertedSize = size * Math.pow(1024, fromIndex - toIndex);

  // 将转换后的文件大小四舍五入到指定小数位数，并返回结果
  return `${convertedSize.toFixed(decimalPoint)} ${toUnit}`;
}

/**
 * @description 防抖函数
 * @param fn 要执行的函数
 * @param delay 延迟时间
 */
export function debounce<T extends unknown[], R>(
  fn: (...args: T) => R,
  delay: number,
) {
  let timer: NodeJS.Timeout | null = null;

  return function (this: any, ...args: T) {
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      fn.apply(this, args);
    }, delay);
  };
}

export function formatISODate(isoDateString?: string) {
  // 创建 Date 对象
  const date = new Date(isoDateString);

  // 获取年、月、日、小时、分钟、秒
  const year = date.getUTCFullYear(); // 使用 UTC 时间
  const month = String(date.getUTCMonth() + 1).padStart(2, '0'); // 月份从 0 开始，需加 1
  const day = String(date.getUTCDate()).padStart(2, '0');
  const hours = String(date.getUTCHours()).padStart(2, '0');
  const minutes = String(date.getUTCMinutes()).padStart(2, '0');
  const seconds = String(date.getUTCSeconds()).padStart(2, '0');

  // 拼接成目标格式
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}